package com.ecelin.controller;

import io.swagger.annotations.ApiOperation;
import org.dromara.x.file.storage.core.FileInfo;
import org.dromara.x.file.storage.core.FileStorageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

/**
 * @author ecelin
 */
@RestController
@RequestMapping
public class FileDetailController {

	@Autowired
	private FileStorageService fileStorageService;

	/**
	 * 上传文件 目标目录
	 */
	@ApiOperation("上传文件到默认目录")
	@PostMapping("/upload-to-default-path")
	public FileInfo upload(MultipartFile file) {
		return fileStorageService.of(file).upload();
	}

	/**
	 * 上传文件，成功返回文件 url
	 */
	@PostMapping("/upload-to-target-path")
	@ApiOperation("上传文件到目标目录")
	public FileInfo upload2(MultipartFile file) {
		FileInfo fileInfo = fileStorageService.of(file)
				//保存到相对路径下，为了方便管理，不需要可以不写
				.setPath("ecelin/file/")
				////关联对象id，为了方便管理，不需要可以不写
				//.setObjectId("0")
				////关联对象类型，为了方便管理，不需要可以不写
				//.setObjectType("0")
				////保存一些属性，可以在切面、保存上传记录、自定义存储平台等地方获取使用，不需要可以不写
				//.putAttr("role", "admin")
				.upload();  //将文件上传到对应地方
		return fileInfo;
	}

	/**
	 * 上传图片，成功返回文件信息
	 * 图片处理使用的是 https://github.com/coobird/thumbnailator
	 */
	@PostMapping("/upload-image")
	@ApiOperation("上传图片")
	public FileInfo uploadImage(MultipartFile file) {
		return fileStorageService.of(file)
				.setPath("ecelin/images/")
				//将图片大小调整到 1000*1000
				.image(img -> img.size(1000, 1000))
				//再生成一张 200*200 的缩略图
				//.thumbnail(th -> th.size(200, 200))
				.upload();
	}

	///**
	// * 上传文件到指定存储平台，成功返回文件信息
	// */
	//@PostMapping("/upload-platform")
	//public FileInfo uploadPlatform(MultipartFile file) {
	//    return fileStorageService.of(file)
	//            .setPlatform("aliyun-oss-1")    //使用指定的存储平台
	//            .upload();
	//}

	///**
	// * 直接读取 HttpServletRequest 中的文件进行上传，成功返回文件信息
	// * 使用这种方式有些注意事项，请查看文档 基础功能-上传 章节
	// */
	//@PostMapping("/upload-request")
	//public FileInfo uploadPlatform(HttpServletRequest request) {
	//	return fileStorageService.of(request).upload();
	//}
}
